package com.sinosoft.hydra.um.repositories;

import java.util.List;

import cn.com.sinux.spring.repositories.IBaseRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

import com.sinosoft.hydra.um.domain.permission.SysResource;

/**
 * 
 * @author liangminga
 * @since 0.5-alpha
 * 2014年12月17日
 * 描述：进行资源的增删查改等操作。验证增加资源时资源名称重复，编辑资源时资源名称重复的功能。
 * 
 */
public interface SysResourceRepository extends IBaseRepository<SysResource, String> {

    @Query("select r from SysResource r where r.permission = ?1")
    public List<SysResource> findResourceByPermission(String permission);
	
	/**
	 * 根据角色主键查找资源主键集
	 * @param roleId 角色主键
	 * @return List<String> 资源主键集
	 */
	@Query("select u.id from SysResource u inner join u.sysRoles as  r where r.id = ?")
	public List<String> findByRoleId(String roleId);
	
	/**
	 * 根据角色主键查找资源权限码
	 * @param roleId 角色主键
	 * @return List<String> 资源权限码集
	 */
	@Query("select u.permission from SysResource u inner join u.sysRoles as  r where  u.available=1  and  r.id in (?1) ")
	public List<String> findByRoleIds(List<String> roleId);
	
	/**
	 * 根据角色主键查找资源主键集
	 * @param roleId 角色主键
	 * @return List<String> 资源主键集
	 */
	@Query("select u.id from SysResource u inner join u.sysRoles as  r where r.id in (?1)")
	public List<String> findIdByRoleIds(List<String> roleId);
	/**
	 * 根据资源名称查找资源
	 * @param name 资源名称
	 * @return SysResource 资源对象
	 */
	@Query("select u from  SysResource u where u.resourceName = ?1")
	public SysResource repeatValidate(String name);
	/**
	 * 查找不为指定主键但为指定资源名称的资源
	 * @param name 资源名称
	 * @param id 资源主键
	 * @return SysResource 资源对象
	 */
	@Query("select u from  SysResource u where u.resourceName = ?1 and u.id!=?2")
	public SysResource repeatValidate(String name,String id);
	/**
	 * 查找所有 资源
	 * @return List<String> 资源列表
	 */
	@Query("select r.id from SysResource r")
	public List<String> findAllResId();
}




